"""
常用功能
"""
from lib.prettytable import PrettyTable


def prettyprint(title: str, fields: list[str], data: list[list], min_width: int = 5, auto_index: bool = False) -> None:
    """
    美化打印
    :param title: 表格标题
    :param fields: 表格字段
    :param data: 表格数据
    :param min_width: 最小宽度
    :param auto_index: 自动编号
    :return: None
    """
    tb = PrettyTable(fields, title=title, min_width=min_width)
    tb.add_rows(data)
    if auto_index:
        tb.add_autoindex('序号')
    print(tb)


def loop_input(msg: str, err_msg: str, func, *args):
    """
    循环输入
    :param msg: 输入时打印
    :param err_msg: 输出错误时打印
    :param func: 判断输入合法的函数
    :param args: 判断函数的参数
    :return: 输入的值
    """
    while True:
        input_str = input(msg).strip()  # 输入并打印提示信息
        if func(input_str, *args):  # 通过匿名函数判断是否合法
            return input_str  # 合法返回输入的字符串
        print(err_msg)  # 输入不合法


def login_auth(login_func, login_user):
    """登录装饰器"""

    def auth(func):
        def inner(*args, **kwargs):
            if not login_user['username']:
                print('请登录后使用功能！')
                login_func()  # 执行对应的登录函数
                if login_user['username']:
                    func(*args, **kwargs)
                return
            func(*args, **kwargs)

        return inner

    return auth
